home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / gfx / edit / AmiCAD_2.07.lha / AmiCAD / ARexx / ChargeRC.AmiCAD < prev    next >
Text File  |  2000-11-04  |  4KB  |  169 lines

  1. /* Tracé de la courbe de charge d'un condensateur.
  2. Version 1.00: 12 novembre 1998
  3. Version 1.01: 13 avril 2000 (modif SAVEALL)
  4. Version 1.02: 4 novembre 2000 (localisation anglais/français)
  5. $VER: 1.01 (© R.Florac, 13 Avril 2000) */
  6.  
  7. options results     /* indispensable pour récupérer le résultat des macros */
  8.  
  9. signal on error     /* pour l'interception des erreurs */
  10. signal on syntax
  11.  
  12. 'LANGUAGE'
  13. if result='français.language' then fr=1
  14. else fr=0
  15.  
  16. clip=-1
  17. FIRSTSEL; obj=result
  18. if obj>0 then do
  19.     'TYPE(FIRSTSEL)'; type=result
  20.     if type=22 then do
  21.     'CLIPUNIT(5)'; clip=result
  22.     'COORDS(FIRSTSEL)'; coords=result
  23.     PARSE VAR coords x0 ',' y0 ',' x1 ',' y1
  24.     xg=minima(x0,x1); xd=maxima(x0,x1)
  25.     yh=minima(y0,y1); yb=maxima(y0,y1)
  26.     l=xd-xg+1; h=yb-yh+1
  27.     'NEXTSEL('obj')'; obj=result
  28.     end
  29. end
  30. else obj=1
  31.  
  32. if obj>0 then do
  33.     if fr=1 then 'MESSAGE("Dessinez et sélectionnez"+CHR(10)+"un rectangle dans"+CHR(10)+"lequel doit être"+CHR(10)+"intégrée la grille")'
  34.     else 'MESSAGE("Draw and select the box"+CHR(10)+"where the grid will be placed"+CHR(10)+"before calling this script")'
  35.     call quitter
  36. end
  37.  
  38. ndh=5
  39. y1=yh+h
  40. x1=xg+ndh*(l%ndh)
  41. 'SAVEALL'
  42.  
  43. 'DELETE(FIRSTSEL):ROTATE(0,0)'
  44. /* Tracé des lignes verticales */
  45. do i=1 to 5
  46.     x2 = xg+i*(l/ndh)
  47.     x2 = x2%1
  48.     'DRAWMODE(1)'
  49.     do c=1 to 9
  50.     xc = x2-(l/ndh)/10*c
  51.     xc=xc%1
  52.     'DRAW('xc','yh','xc','yb')'
  53.     end
  54.     'DRAWMODE(2):DRAW('x2','yh','x2','yb')'
  55. end
  56. /* Repères verticaux */
  57. if h>300 then hc=2
  58. else hc=1
  59. if l>600 then lc=2
  60. else lc=1
  61. 'SETSCALE(0,'lc'*100,'hc'*100)'
  62. if lc=1 then lc=8
  63. else lc=16
  64. if hc=1 then hc=8
  65. else hc=16
  66.  
  67. if xg-5*lc<0 then do
  68.     if fr=1 then 'MESSAGE("Position grille incorrecte"+CHR(10)+"(Trop à gauche)")'
  69.     else 'MESSAGE("Bad grid placement"+CHR(10)+"(too left)")'
  70.     call quitter
  71. end
  72.  
  73. 'DRAWMODE(1):WRITE("0",'xg-lc-lc','yb+hc/2')'
  74. p=h%4
  75. 'WRITE("0,25",'xg-4*lc-lc','yh+3*p+hc/2')'
  76. 'WRITE("0,5",'xg-3*lc-lc','yh+2*p+hc/2')'
  77. 'WRITE("0,75",'xg-4*lc-lc','yh+p+hc/2')'
  78. 'WRITE("1",'xg-lc-lc','yh+hc/2')'
  79. /* Tracé des lignes horizontales */
  80. ndv=2
  81. do i=1 to ndv
  82.     y2 = yh+(i-1)*(h/ndv)
  83.     y2=y2%1
  84.     'DRAWMODE(2):DRAW('xg','y2','xd','y2')'
  85.     y2 = (yh)+i*(h/ndv)
  86.     y2 = y2%1
  87.     'DRAWMODE(1)'
  88.     do c=1 to 9
  89.     yc = y2-(h/ndv)/10*c
  90.     yc=yc%1
  91.     'DRAW('xg','yc','xd','yc')'
  92.     end
  93. end
  94. /* Repères horizontaux */
  95. n=0.5
  96. p=(l/10)%1
  97. ndv=yb+hc+hc/2
  98. 'WRITE("0",'xg-lc/2','ndv')'
  99. 'WRITE("0,5",'xg+p-lc','ndv')'
  100. 'WRITE("1RC",'xg+2*p-2*lc+lc/2','ndv')'
  101. 'WRITE("1,5",'xg+3*p-2*lc+lc/2','ndv')'
  102. 'WRITE("2RC",'xg+4*p-2*lc+lc/2','ndv')'
  103. 'WRITE("2,5",'xg+5*p-2*lc+lc/2','ndv')'
  104. 'WRITE("3RC",'xg+6*p-2*lc+lc/2','ndv')'
  105. 'WRITE("3,5",'xg+7*p-2*lc+lc/2','ndv')'
  106. 'WRITE("4RC",'xg+8*p-2*lc+lc/2','ndv')'
  107. 'WRITE("4,5",'xg+9*p-2*lc+lc/2','ndv')'
  108. 'WRITE("5RC",'xg+10*p-2*lc+lc/2','ndv')'
  109.  
  110. /* Tracé des axes */
  111. 'WRITE("U",'xg-lc*2','yh-hc')'
  112. 'WRITE("t",'xd+3*lc','ndv')'
  113. 'SETSCALE(0,100,100):DRAWMODE(2):DRAW('xg','yb','xg','yh-hc'):DRAW('xg','yb','xd+2*lc','yb')'
  114. 'CONVERT(PUTPART("Flèche",'xg-10','yh-hc-20'),1)'
  115. 'ROTATE(0,1):CONVERT(PUTPART("Flèche",'xd+2*lc','yb-10'),1):DRAWMODE(3)'
  116.  
  117. /* Tracé de la courbe de charge */
  118. if ~show('L','rexxmathlib.library') then
  119.     call addlib('rexxmathlib.library',0,-30)
  120. tau=l/5
  121. y0=yb; x0=xg
  122. do i=1 to l/5
  123.     y=h+(-h*exp(-5*i/tau))
  124.     y=y%1
  125.     'DRAW('x0','y0','x0+5','yb-y')'
  126.     x0=x0+5
  127.     y0=yb-y
  128. end
  129.  
  130. /* Tracé de la courbe de charge */
  131. y0=yh; x0=xg
  132. do i=1 to l/5
  133.     y=h+(-h*exp(-5*i/tau))
  134.     y=y%1
  135.     'DRAW('x0','y0','x0+5','yh+y')'
  136.     x0=x0+5
  137.     y0=yh+y
  138. end
  139.  
  140. call quitter
  141.  
  142. minima: procedure
  143.     parse arg v1,v2
  144.     if v1<v2 then return v1
  145.     return v2
  146. end
  147.  
  148. maxima: procedure
  149.     parse arg v1,v2
  150.     if v1>v2 then return v1
  151.     return v2
  152. end
  153.  
  154. quitter: procedure expose clip
  155.     if clip>=0 then 'CLIPUNIT('clip')'
  156.     exit
  157.  
  158. /* Traitement des erreurs, interruption du programme */
  159. syntax:
  160. erreur=RC
  161. if fr=1 then 'MESSAGE("Script ChargeRC.AmiCAD"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
  162. else 'MESSAGE("Script ChargeRC.AmiCAD"+CHR(10)+"Syntax error"+CHR(10)+"in line 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
  163. exit
  164.  
  165. error:
  166. if fr=1 then 'MESSAGE("Script ChargeRC.AmiCAD"+CHR(10)+"Erreur en ligne 'SIGL'")'
  167. else 'MESSAGE("Script ChargeRC.AmiCAD"+CHR(10)+"Error in line 'SIGL'")'
  168. exit
  169.